// 简单的状态管理实现
import { reactive, readonly } from 'vue'

// 从localStorage恢复状态
const getInitialState = () => {
  return {
    // 用户信息
    user: JSON.parse(localStorage.getItem('user') || 'null'),
    // 用户权限列表
    permissions: JSON.parse(localStorage.getItem('permissions') || '[]'),
    // 用户角色
    role: localStorage.getItem('role') || '',
    // 是否已认证
    isAuthenticated: localStorage.getItem('isAuthenticated') === 'true',
    // token
    token: localStorage.getItem('token') || ''
  }
}

// 创建状态存储
const state = reactive(getInitialState())

// 定义操作方法
const methods = {
  // 设置用户信息
  setUser(userData) {
    state.user = userData
    state.isAuthenticated = true
    // 设置用户角色和权限
    if (userData && userData.role) {
      this.setRole(userData.role)
      // 如果是admin角色，设置所有权限
      if (userData.role === 'admin') {
        this.setPermissions(['user', 'admin', 'order', 'statistics'])
      } else if (userData.permissions) {
        this.setPermissions(userData.permissions)
      }
    }
    // 将用户信息保存到本地存储
    this.setStore('user', userData)
    this.setStore('isAuthenticated', 'true')
  },
  
  // 清除用户信息（登出时使用）
  clearUser() {
    state.user = null
    state.permissions = []
    state.role = ''
    state.isAuthenticated = false
    state.token = ''
    // 清除本地存储中的所有相关信息
    this.removeStore('user')
    this.removeStore('permissions')
    this.removeStore('role')
    this.removeStore('isAuthenticated')
    this.removeStore('token')
  },
  
  // 设置用户权限
  setPermissions(permissions) {
    state.permissions = permissions
    this.setStore('permissions', permissions)
  },
  
  // 设置用户角色
  setRole(role) {
    state.role = role
    this.setStore('role', role)
  },
  
  // 检查是否有某权限
  hasPermission(permission) {
    // admin角色拥有所有权限
    if (state.role === 'admin') {
      return true
    }
    
    // 支持两种权限检查方式：
    // 1. 传统方式：检查完整权限字符串，如 'user:view'
    // 2. 简化方式：检查路径权限，如 'user'
    
    // 先检查完整匹配
    if (state.permissions.includes(permission)) {
      return true
    }
    
    // 如果是路径权限检查（例如检查'user'路径权限）
    if (permission.indexOf(':') === -1) {
      // 查找是否有以该路径开头的权限
      return state.permissions.some(p => 
        // 完全匹配路径
        p === permission || 
        // 或者是以路径+冒号开头的权限（如'user:view'）
        p.startsWith(permission + ':')
      )
    }
    
    return false
  },
  
  // 检查是否有某角色
  hasRole(role) {
    return state.role === role
  },

  // localStorage操作方法
  setStore(name, content) {
    if (!name) return
    if (typeof content !== 'string') {
      content = JSON.stringify(content)
    }
    window.localStorage.setItem(name, content)
  },

  getStore(name) {
    if (!name) return
    let v = window.localStorage.getItem(name)
    if (v == null) {
      return ''
    }
    return v
  },

  removeStore(name) {
    if (!name) return
    window.localStorage.removeItem(name)
  },

  // Token相关方法
  setToken(token) {
    state.token = token
    this.setStore('token', token)
  },

  getToken() {
    return state.token
  },

  removeToken() {
    state.token = ''
    this.removeStore('token')
  }
}

// 导出只读状态和方法
export default {
  state: readonly(state),
  ...methods
}